home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1980-01-01 | 14.7 KB | 246 lines
1000 GOTO 4320: REM GO SETUP GAME 1020 ' --- MAIN PROGRAM LOOP --- 1040 K=K+1:IF K = 48 THEN 4120 1060 P=P+1: IF P=P1+1 THEN P=1 1080 FOR I=1 TO 5 1100 R(I)=INT(9*RND(1)+1): C(I)=INT(12*RND(1)+1) 1120 FOR I1= I-1 TO 0 STEP -1: IF R(I)=R(I1) AND C(I)=C(I1) THEN 1100 1140 NEXT I1: IF M(R(I),C(I))>1 THEN 1100 1160 FOR I1 = 1 TO 5: IF Q(I1)=0 THEN 1420 1180 NEXT I1: IF M(R(I),C(I)+1)>3 OR M(R(I),C(I)-1)>3 THEN 1420 1200 IF M(R(I)+1,C(I))>3 OR M(R(I)-1,C(I))>3 THEN 1420 1220 A1 = M(R(I),C(I)+1): A2 = M(R(I),C(I)-1) 1240 A3 = M(R(I)+1,C(I)): A4 = M(R(I)-1,C(I)) 1260 IF A1 = 2 AND A2 < 4 AND A3 < 4 AND A4 < 4 THEN 1100 1280 IF A2 = 2 AND A1 < 4 AND A3 < 4 AND A4 < 4 THEN 1100 1300 IF A3 = 2 AND A1 < 4 AND A2 < 4 AND A4 < 4 THEN 1100 1320 IF A4 = 2 AND A1 < 4 AND A2 < 4 AND A3 < 4 THEN 1100 1340 IF A1 = 3 AND A2 < 4 AND A3 < 4 AND A4 < 4 THEN 1100 1360 IF A2 = 3 AND A1 < 4 AND A3 < 4 AND A4 < 4 THEN 1100 1380 IF A3 = 3 AND A1 < 4 AND A2 < 4 AND A4 < 4 THEN 1100 1400 IF A4 = 3 AND A1 < 4 AND A2 < 4 AND A3 < 4 THEN 1100 1420 NEXT I: GOSUB 2560: PRINT 1440 GOSUB 3960: LOCATE 21,1 : PRINT P$(P) ", your legal moves are:" 1460 FOR XX=1 TO 5: PRINT R(XX) MID$(M$,C(XX),1) " / ";: NEXT XX: PRINT 1480 PRINT "What's your move ";: GOSUB 5240: R$=REPLY$ 1500 IF LEFT$(R$,1)="M" THEN GOSUB 2560: GOTO 1440: REM DISPLAY MAP 1520 IF LEFT$(R$,1)="S" THEN GOSUB 3800: GOTO 1440: REM DISPLAY STOCK 1540 IF (LEFT$(R$,1)="") THEN GOTO 1440 1560 R=VAL(LEFT$(R$,1)) 1580 C= ASC(RIGHT$(R$,1))-64: FOR I=1 TO 5: IF R = R(I) AND C=C(I) THEN 1640 1600 NEXT I: GOSUB 3960: LOCATE 21,1: PRINT CHR$(7) "That space was not on the list...": FOR XX=1 TO 1500: NEXT XX: GOTO 1440 1620 ' --- CHECK FOR MERGER --- 1640 A1=M(R-1,C): A2=M(R+1,C): A3=M(R,C+1): A4=M(R,C-1) 1660 IF A1<=1 AND A2 <= 1 AND A3 <= 1 AND A4 <= 1 THEN M(R,C)=2: GOTO 2240 1680 IF A1>3 AND A2>3 AND A2<>A1 THEN GOSUB 2780 1700 IF A1>3 AND A3>3 AND A3<>A1 THEN GOSUB 2780 1720 IF A1>3 AND A4>3 AND A1<>A4 THEN GOSUB 2780 1740 IF A2>3 AND A3>3 AND A2<>A3 THEN GOSUB 2780 1760 IF A2>3 AND A4>3 AND A2<>A4 THEN GOSUB 2780 1780 IF A3>3 AND A4>3 AND A3<>A4 THEN GOSUB 2780 1800 IF A1<4 AND A2<4 AND A3<4 AND A4<4 THEN 1940 1820 IF M(R,C)>3 THEN 2240 1840 IF A1>3 THEN I = A1-3 1860 IF A2>3 THEN I = A2-3 1880 IF A3>3 THEN I = A3-3 1900 IF A4>3 THEN I = A4-3 1920 Q(I) = Q(I)+1: S1(I) = S1(I)+100: M(R,C)=I+3:GOTO 2040 1940 FOR I=1 TO 5:IF Q(I)=0 THEN 1980 1960 NEXT I: IF M(R,C) < 3 THEN M(R,C) = 2: GOTO 2240 1980 GOSUB 4040:V=7: CT$= "A NEW SHIPPING COMPANY HAS BEEN FORMED!" :GOSUB 5040 2000 V=9: CT$= "It's name is "+M$(I): GOSUB 5040: S(I,P)=S(I,P)+5:Q(I)=1 2020 PRINT:PRINT:PRINT:PRINT:PRINT 2040 IF A1=3 THEN S1(I)=S1(I)+500 2060 IF A2=3 THEN S1(I)=S1(I)+500 2080 IF A3=3 THEN S1(I)=S1(I)+500 2100 IF A4=3 THEN S1(I)=S1(I)+500 2120 IF A1=2 THEN S1(I)=S1(I)+100: Q(I) = Q(I)+1: M(R-1,C)=I+3 2140 IF A2=2 THEN S1(I)=S1(I)+100: Q(I) = Q(I)+1: M(R+1,C)=I+3 2160 IF A3=2 THEN S1(I)=S1(I)+100: Q(I) = Q(I)+1: M(R,C+1)=I+3 2180 IF A4=2 THEN S1(I)=S1(I)+100: Q(I) = Q(I)+1: M(R,C-1)=I+3 2200 IF S1(I) >=3000 THEN T1=I: GOSUB 3700 2220 M(R,C) = I+3 2240 FOR I=1 TO 5: B(P)=B(P)+INT(0.05*S(I,P)*S1(I)): NEXT I 2260 ' --- PURCHASE STOCK --- 2280 FOR I=1 TO 5: IF Q(I) = 0 THEN 2520 2300 IF B(P) < S1(I) THEN 2520 2320 GOSUB 3960: LOCATE 21,1 :PRINT P$(P) ", you have $" B(P) "." 2340 PRINT "How many shares of " M$(I) 2360 PRINT " do you want to buy at $" S1(I); 2380 GOSUB 5240: R3$=REPLY$: IF LEFT$(R3$,1)="M" THEN GOSUB 2560: GOTO 2320 2400 IF LEFT$(R3$,1)="S" THEN GOSUB 3800: GOTO 2320 2420 R3=VAL(R3$):R3$="" 2440 IF R3*S1(I) <= B(P) THEN 2480 2460 GOSUB 3960: LOCATE 21,1 :PRINT CHR$(7) "You only have $" B(P) "-try again.":FOR ZZ=1 TO 1500: NEXT ZZ: GOTO 2320 2480 IF R3=0 THEN 2520 2500 S(I,P) = S(I,P)+R3: B(P) = B(P) -(R3*S1(I)) 2520 NEXT I: GOTO 1040 2540 ' --- DISPLAY GALAXY MAP --- 2560 CLS 2580 LOCATE 1,OFFSET: PRINT " *********** MAP OF GALAXY ***********" 2600 LOCATE 2,OFFSET: PRINT " A B C D E F G H I J K L" 2620 FOR R2=1 TO 9 2640 CV=R2+R2+1: LOCATE CV,OFFSET: PRINT R2; 2660 FOR C2=1 TO 12 2680 PRINT " " MID$(L$,M(R2,C2),1) " "; 2700 NEXT C2 2720 NEXT R2 2740 RETURN 2760 ' --- MERGE COMPANIES --- 2780 F1=A1-3:IF F1<0 THEN F1=0 2800 F2=A2-3:IF F2<0 THEN F2=0 2820 F3=A3-3:IF F3<0 THEN F3=0 2840 F4=A4-3:IF F4<0 THEN F4=0 2860 T=Q(F1): T1=F1: IF Q(F2) > Q(F1) THEN T=Q(F2): T1=F2 2880 IF Q(F3) >T THEN T=Q(F3):T1=F3 2900 IF Q(F4) > T THEN T=Q(F4): T1=F4 2920 IF F1=T1 OR A1<4 THEN 2960 2940 X=F1: GOSUB 3200 2960 IF F2=T1 OR A2<4 THEN 3000 2980 X=F2: GOSUB 3200 3000 IF F3=T1 OR A3<4 THEN 3040 3020 X=F3: GOSUB 3200 3040 IF F4=T1 OR A4<4 THEN 3080 3060 X=F4: GOSUB 3200 3080 IF A1=2 THEN M(R-1,C)=M(R,C) 3100 IF A2=2 THEN M(R+1,C)=M(R,C) 3120 IF A3=2 THEN M(R,C+1)=M(R,C) 3140 IF A4=2 THEN M(R,C-1)=M(R,C) 3160 RETURN 3180 ' --- DISPLAY MERGER INFO --- 3200 GOSUB 4040: PRINT M$(X) " and":PRINT M$(T1) " have just merged.":PRINT 3220 PRINT "Please note the following transactions." 3240 PRINT: PRINT TAB(4) "Old Stock = " M$(X): PRINT TAB(4) "New Stock = " M$(T1): PRINT 3260 PRINT TAB(9);"OLD"; TAB(16); "NEW"; TAB(24) "TOTAL"; TAB(32) "BONUS" 3280 PRINT "PLAYER"; TAB(8);"STOCK"; TAB(15); "STOCK";TAB(23);"HOLDINGS";TAB(32);"PAID" 3300 PRINT STRING$(39,"-"): FOR I=1 TO P1: PRINT LEFT$(P$(I),8); TAB(9);S(X,I); TAB(16);INT((0.5*S(X,I))+0.5); 3320 PRINT TAB(24) S(T1,I) + INT ((0.5*S(X,I))+0.5); 3340 X1=0: FOR I1 = 1 TO P1 : X1=X1+S(X,I1) : NEXT I1 3360 PRINT TAB(30) "$" INT(10*((S(X,I)/X1)*S1(X))): NEXT I 3380 FOR I=1 TO P1 : S(T1,I)=S(T1,I) + INT ((0.5*S(X,I))+0.5) 3400 B(I) = B(I)+ INT(10*((S(X,I)/X1)*S1(X))): NEXT I 3420 FOR I = 1 TO 9: FOR J = 1 TO 12: IF M(I,J) = X+3 THEN M(I,J) = T1+3 3440 NEXT J,I 3460 A1=M(R-1,C): A2=M(R+1,C): A3 = M(R,C+1): A4 = M(R,C-1) 3480 F1=A1-3:IF F1<0 THEN F1 = 0 3500 F2=A2-3:IF F2<0 THEN F2 = 0 3520 Q(T1)=Q(T1)+Q(X):S1(T1) = S1(T1)+ S1(X): IF S1(T1) <= 3000 THEN 3580 3540 FOR XX= 0 TO 1000:NEXT XX 3560 GOSUB 3700 3580 F3=A3-3: IF F3<0 THEN F3=0 3600 F4=A4-3: IF F4<0 THEN F4=0 3620 S1(X) = 100: Q(X) = 0: FOR I=1 TO P1: S(X,I) = 0: NEXT I 3640 M(R,C)=T1+3 3660 RETURN 3680 ' --- STOCK SPLIT --- 3700 GOSUB 4040: PRINT "The stock of ";M$(T1);" has split 2 for 1!!":S1(T1)=INT(S1(T1)/2) 3720 PRINT:PRINT:PRINT:PRINT:PRINT 3740 FOR I1=1 TO P1: S(T1,I1) = 2* S(T1,I1): NEXT I1 3760 RETURN 3780 ' --- DISPLAY STOCK HOLDINGS --- 3800 CLS: PRINT 3820 PRINT TAB(24) "SHARE" 3840 PRINT " COMPANY NAME" TAB(24) "PRICE" TAB(32) "HOLDINGS" 3860 PRINT STRING$(39,"="): PRINT 3880 FOR I3=1 TO 5: IF S1(I3) = 100 THEN 3920 3900 PRINT M$(I3) TAB(24) S1(I3) TAB(34) S(I3,P): PRINT 3920 NEXT I3:RETURN 3940 ' --- CLEAR PROMPT AREA --- 3960 CV = CSRLIN : CH = POS(0) 3980 LOCATE 21,1: PRINT BL$ BL$ BL$; 4000 LOCATE CV,CH : RETURN 4020 ' --- SPECIAL ANNOUNCEMENT --- 4040 FOR XX=0 TO 1000: NEXT XX: CLS 4060 PRINT CHR$(7): LOCATE 20,OFFSET+9: PRINT "SPECIAL ANNOUNCEMENT!!": FOR XX=1 TO 18: PRINT STRING$(39," "): NEXT XX: LOCATE 7,1 4080 RETURN 4100 ' --- END OF GAME DISPLAY --- 4120 GOSUB 4040: V=7: CT$="The game is over.": GOSUB 5040: V=8: CT$="Here are the final standings...": GOSUB 5040: PRINT 4140 GOSUB 4180: PRINT: PRINT TAB(OFFSET) "Another Game (Y/N) ";: GOSUB 5240: IF LEFT$(REPLY$,1)="Y" THEN RUN 4160 V=CSRLIN-1: CT$="- - - T H E E N D - - -": GOSUB 5040: LOCATE 22,1: END 4180 PRINT: PRINT TAB(11+OFFSET) "VALUE" TAB(21+OFFSET) "CASH" 4200 LOCATE ,OFFSET: PRINT " PLAYER" TAB(10+OFFSET) "OF STOCK" TAB(20+OFFSET) "ON HAND" TAB(29+OFFSET) "NET WORTH" 4220 LOCATE ,OFFSET: PRINT STRING$(39,"-") 4240 FOR I=1 TO P1: D1(I)=0: FOR J= 1 TO 5: D1(I)=D1(I)+(S1(J)*S(J,I)): NEXT J,I 4260 FOR I=1 TO P1:LOCATE ,OFFSET: PRINT LEFT$(P$(I),9) TAB(10+OFFSET) D1(I) TAB(20+OFFSET) B(I) TAB(29+OFFSET) D1(I)+B(I): NEXT I: RETURN 4280 ' ********* START GAME INITIALIZATION ********* 4300 ' --- TEST FOR COLOR OR MONO DISPLAY --- 4320 DEF SEG=&HB000: POKE &H0,&H20: POKE &H8000,&H20:REM POKE VALUE TO SEE IF CARD IS THERE 4340 IF PEEK(&H8000) = &H20 AND PEEK(&H0) <> &H20 THEN GOSUB 5140: GOTO 4440:REM COLOR ONLY 4360 IF PEEK(&H0) = &H20 AND PEEK(&H8000) <> &H20 THEN GOSUB 5180: GOTO 4440:REM MONO ONLY 4380 GOSUB 5140: GOSUB 5180: V=6: CT$="WOW !!!": GOSUB 5040: V=8: CT$="You have both COLOR and MONOCHROME displays.": GOSUB 5040: V=10: CT$="Which one should I use ?": GOSUB 5040: V=12: CT$="(C or M) ": GOSUB 5040 4400 INPUT "",REPLY$: CLS: IF LEFT$(REPLY$,1)="C" OR LEFT$(REPLY$,1)="c" THEN GOSUB 5140: REM USE COLOR 4420 ' --- DISPLAY BANNER --- 4440 V=3: CT$="* S T A R L A N E S *": GOSUB 5040 4460 V=5: CT$="THE GAME": GOSUB 5040 4480 V=7: CT$="OF": GOSUB 5040 4500 V=9: CT$="INTERSTELLAR TRADING ": GOSUB 5040 4520 ' --- SEED RANDOM NUMBER GENERATOR --- 4540 V=15: CT$="PLEASE PRESS THE SPACE BAR": GOSUB 5040: V=16: CT$="TO SEED THE": GOSUB 5040: V=17: CT$="RANDOM NUMBER GENERATOR": GOSUB 5040 4560 X=INT(RND(1) * 32767): LOCATE 19,OFFSET+15: PRINT X;: X$=INKEY$: IF X$ <> CHR$(32) THEN GOTO 4560 4580 RANDOMIZE X 4600 ' --- SETUP VARIABLES --- 4620 DIM M(10,13),S(5,4) 4640 ZERO=0: ONE=1: TWO=2: THREE=3: FOUR=4: FIVE=5: SIX=6: SEVEN=7: EIGHT=8: NINE=9: TEN=10: ELEVEN=11: TWELVE=12 4660 FOR I=1 TO 5: FOR J=1 TO 4: S(I,J)=0: D1(I)=0: S1(I)=100: Q(I)=0: B(I)=6000: NEXT J,I 4680 M$(1)="ALTAIR STARWAYS": M$(2)="BETELGEUSE LTD": M$(3)="CAPELLA FREIGHT": M$(4)="DENEBOLA SHIPPERS": M$(5)="ERIDIAN EXPENDITURES" 4700 L$=".+*ABCDE": M$="ABCDEFGHIJKL" 4720 CLS: V=3: CT$="P C": GOSUB 5040: V=5: CT$="* S T A R L A N E S *": GOSUB 5040: V=7: CT$="VERSION 1.0": GOSUB 5040 4740 FOR I=1 TO 9: FOR J=1 TO 12 4760 IF INT(RND(1)*20)+1<>10 THEN M(I,J)=1: GOTO 4800 4780 M(I,J)=3 4800 NEXT J,I 4820 ' --- GET PLAYER INFORMATION --- 4840 V=10: CT$="Instructions (Y/N) ": GOSUB 5040: GOSUB 5220 4860 IF LEFT$(REPLY$,1)="Y" THEN GOSUB 5460: GOTO 4720 4880 V=10: CT$="How many players (2-4) ": GOSUB 5040: GOSUB 5220 4900 P1=VAL(REPLY$): IF P1<2 OR P1>4 THEN GOTO 4880 4920 LOCATE 10,1: PRINT BL$: LOCATE 10,1: FOR I=1 TO P1: PRINT "Player" I "what is your name";: INPUT P$(I): NEXT I 4940 'FOR I=1 TO P1: IF LEN(P$(I)) > 7 THEN P$(I)=LEFT$(P$(I),7): NEXT I 4960 PRINT: PRINT"Now I will decide who goes first...": FOR XX=1 TO 1000: NEXT XX 4980 PRINT "Hmmmm... let me see now.": I=INT(P1*RND(1)+1): FOR XX=1 TO 1500: NEXT XX 5000 PRINT "OK. I've decided...": FOR XX=1 TO 1000: NEXT XX: PRINT P$(I) " goes first.": FOR XX=1 TO 2000: NEXT XX 5020 CLS: K=0: P=I: GOTO 1080: REM WE ARE ALL SET. START GAME. 5040 ' --- PRINT CENTERING ROUTINE --- 5060 LOCATE V,1: PRINT BL$; 5080 LOCATE V,(OFFSET+19)-LEN(CT$)/2 5100 PRINT CT$; 5120 RETURN 5140 ' --- SWITCH TO COLOR DISPLAY --- 5160 KEY OFF: CLS: LOCATE ,,0: DEF SEG=0: POKE &H410,(PEEK(&H410) AND &HCF) OR &H10: SCREEN 0,1,0,0: WIDTH 40: COLOR 15,1,1: CLS: OFFSET=1: BL$=SPACE$(39): LOCATE 1,1,0,6,7: RETURN 5180 ' --- SWITCH TO MONOCHROME DISPLAY --- 5200 KEY OFF: CLS: LOCATE ,,0: DEF SEG=0: POKE &H410,PEEK(&H410) OR &H30: SCREEN 0: WIDTH 80: COLOR 7,0: CLS: OFFSET=21: BL$=SPACE$(79): LOCATE 1,1,0,12,13: RETURN 5220 ' --- GET USER REPLY --- 5240 INPUT REPLY$ 5260 FOR RI=1 TO LEN(REPLY$) 5280 RA=ASC(MID$(REPLY$,RI,1)) 5300 IF RA>96 AND RA<123 THEN MID$(REPLY$,RI,1)=CHR$(RA-32) 5320 NEXT RI 5340 RETURN 5360 ' --- CONTINUE ? --- 5380 LOCATE 22,1: GOSUB 3960: V=CSRLIN: CT$="Press Space Bar to continue": GOSUB 5040 5400 REPLY$=INKEY$: IF REPLY$ <> CHR$(32) THEN GOTO 5400 5420 LOCATE CSRLIN-1: PRINT BL$: RETURN 5440 ' --- DISPLAY INSTRUCTIONS --- 5460 V=10: CT$=" by": GOSUB 5040 5480 V=CSRLIN+2: CT$="John Bernauer": GOSUB 5040: V=CSRLIN+2: CT$="Malcom Higgins": GOSUB 5040: V=CSRLIN+2: CT$="Brian Irvine": GOSUB 5040 5500 GOSUB 5380: CLS 5520 CLS 5540 A$=" STAR LANES is a game of interstellar trading.": GOSUB 5780 5560 A$="The object of the game is to amass more money than your fellow players by establishing vast interstellar shipping lanes and obtaining stock in the companies that control these lanes.": GOSUB 5780 5580 PRINT: PRINT: A$=" During the game, players will be shown a map of the galaxy, and be given a choice of five `space coordinates' which they may occupy.": GOSUB 5780 5600 A$="Occupation of a coordinate causes one of four things to happen, formation of an Outpost, formation of a new Shipping Company, merger of two Companies, or growth of an existing Company.": GOSUB 5780 5620 PRINT: PRINT: A$="NEW OUTPOST - If the player selects a coordinate in the middle of nowhere, an Outpost will be formed. The Outpost will be marked with a `+'.": GOSUB 5780 5640 PRINT: PRINT: A$="NEW SHIPPING COMPANY - If the player selects a coordinate adjacent to an Outpost or a Star, a new Company will be formed. The player will receive five free shares of stock in the new Company.": GOSUB 5780 5660 PRINT: PRINT: A$="MERGER - If the player selects a coordinate between two different Companies, the two Companies will merge. Any stock held in the old Company will be converted into shares in the new Company.": GOSUB 5780 5680 PRINT: PRINT: A$="GROWTH - If the player selects a coordinate next to an existing Company, the Company will absorb the coordinate and the value of it's stock will increase.": GOSUB 5780 5700 PRINT: PRINT: A$=" After selecting a coordinate, the player will be allowed to purchase stock in any of the existing Trading Companies.": GOSUB 5780 5720 PRINT: PRINT: A$=" At any time, a player may enter either `S' to see his Stock portfolio, or `M' to see the Map of the galaxy.": GOSUB 5780 5740 GOSUB 5380: RETURN 5760 ' --- FORMAT 40/80 CHAR TEXT --- 5780 Z=1: A$=" " + A$ + " " 5800 FOR X=1 TO LEN(A$) 5820 IF MID$(A$,X,1) <> " " THEN GOTO 5860 5840 PRINT MID$(A$,Z,X-Z);: Z=X 5860 NEXT: IF CSRLIN > 16 THEN GOSUB 5380: CLS 5880 RETURN